package com.ruoyi.zhgd.domain.vo;

import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import lombok.Data;

import java.math.BigDecimal;
import java.math.RoundingMode;


/**
 * 生产配比数据报表产量分析
 *
 * @author zyb
 * @date 2023-09-06
 */
@Data
@ExcelIgnoreUnannotated
public class NAsphaltOutputAnalysisVo {

    private static final long serialVersionUID = 1L;

    /**
     * 配方编号
     */
    private String matchCode;

    /**
     * 生产批次
     */
    private Integer number;

    /**
     * 重量
     */
    private Double weight;

    /**
     * 平均温度
     */
    private Double tempAvg;

    /**
     * 平均油石比
     */
    private Double ratioAvg;

    /**
     * 不合格批次
     */
    private Integer alarmNumber;

    /**
     * 不合格重量
     */
    private Double alarmWeight;

    /**
     * 温度超上限数量
     */
    private Integer tempUpper;

    /**
     * 温度超下限数量
     */
    private Integer tempLower;

    /**
     * 油石比超上限数量
     */
    private Integer ratioUpper;

    /**
     * 油石比超下限数量
     */
    private Integer ratioLower;

    /**
     * 筛孔预警数量
     */
    private Integer sieveAlarm;

    /********************* 以下参数没有通过数据库直接查询 ************************/
    /**
     * 油石比预警数量
     */
    private Integer ratioAlarm;

    /**
     * 油石比正常数量
     */
    private Integer ratioNormal;

    /**
     * 油石比预警占比
     */
    private Double ratioAlarmRatio;

    /**
     * 温度预警数量
     */
    private Integer tempAlarm;

    /**
     * 温度正常数量
     */
    private Integer tempNormal;

    /**
     * 温度预警占比
     */
    private Double tempAlarmRatio;

    /**
     * 筛孔预警数量
     */
    private Double sieveAlarmRatio;

    /**
     * @Title count
     * @Description 计算其他参数
     */
    public void count() {
        // 判断总量
        number = null == number ? 0 : number;

        // 油石比数量
        ratioUpper = null == ratioUpper ? 0 : ratioUpper;
        ratioLower = null == ratioLower ? 0 : ratioLower;
        ratioAlarm = ratioUpper + ratioLower;
        ratioNormal = number - ratioAlarm;

        // 温度数量
        tempUpper = null == tempUpper ? 0 : tempUpper;
        tempLower = null == tempLower ? 0 : tempLower;
        tempAlarm = tempLower + tempUpper;
        tempNormal = number - tempAlarm;

        // 计算占比
        if (0 < number) {
            BigDecimal total = new BigDecimal(number);
            ratioAlarmRatio = new BigDecimal(ratioAlarm * 100).divide(total, 2, RoundingMode.HALF_UP).doubleValue();
            tempAlarmRatio = new BigDecimal(tempAlarm * 100).divide(total, 2, RoundingMode.HALF_UP).doubleValue();
            sieveAlarmRatio = new BigDecimal(sieveAlarm * 100).divide(total, 2, RoundingMode.HALF_UP).doubleValue();
        }
    }
}
